'''
求任意3个数的最小公倍数
算法设计：
    短除法
    1、用短除法求3个已知数的最小公倍数的过程就是求他们的因数之积，这个因数可能是3个数共有的、两个数共有或一个数独有的三种情况。
    2、在手工完成这个问题时，大脑可以判断3个数含有那些因数以及属于那种情况。用算法实现就只能可利用尝试法了。尝试的范围应该是2、3个数中最大数之间的因数。
    无论因数属于以下3中情况之一，都只算做一个因数，累乘一次。
    （1）、若某个数是3个数的共有的因数，如2是2,14,6中所有数的因数；
    （2）、若某个数是其中两个数的因数，如2是2,5,6中两个数的因数；
    （3）、若某个数是其中某一个的因数，如2是2,5,9中一个数的因数。
    以上3种情况例子中，因数2都只累乘一次。
    3、再看例子2,4,8中2是所有数的因数，为了避免因数的重复计算，一定要用2整除这3个数得到1,2,4.注意到2仍是(1,2,4)的因数，所以才尝试某数是否是3个数的因数时，不是用条件语句if，而是要用循环语句while，以保证将3个数中所含的某个因数能全部被找出，直到3个数都不含这个数做因数时循环结束。
    4、由于某个i是一直3个数的因数有多种情况，以上讨论了3大类，后两类又能细分为更多小的类别。如是其中两个数共有的因数时，可能是第一、三个数的因数，或是第一二个的因数，或是第二，二个数的因数。总之，很难用一个简单的逻辑表达式来表示各种复杂的情况。
    用表达式：k=(x1 % i=0)+(x2%i=0)+(x3%i=0)的值，可以区分某个数i是否已知3个数的因数，k=0表示i不是3个数的因数，k>0表示i是3个数的因数。
    为避免因数重复计算，每次都需要除掉3个整数中已找到的因数(即用因数去除含有它的整数)。而以上逻辑表达式无法识别i具体是哪一个数的因数，要对哪个数进行整除i的运算。采用标志良的方法来解决。
'''
def max(x,y,z):
    if x > y and x > z:
        return  x
    elif y > x and y > z:
        return y
    else:
        return z

def main():
    t = 1
    print("请输入这三个数：")
    x1 = int(input("x1="))
    x2 = int(input("x2="))
    x3 = int(input("x3="))
    x0 = max(x1,x2,x3)
    print("%d,%d,%d这三个数的最小公倍数是：" % (x1, x2, x3),end="")
    for i in range(2,x0+1):
        flag = 1
        while flag == 1:
            flag = 0
            if x1 % i == 0:
                x1 /= i
                flag = 1
            if x2 % i == 0:
                x2 /= i
                flag = 1
            if x3 % i == 0:
                x3 /= i
                flag = 1
            if flag == 1:
                t *= i
        x0 = max(x1,x2,x3)
    print(t)

if __name__ == '__main__':
    main()







